package iso8583

//Fd 全局数据
var Fd = make(map[int]Fielder)

//Register 域解析适配器
func Register(name int, fder Fielder) {
	if Fd == nil {
		Fd = make(map[int]Fielder)
	}
	if _, ok := Fd[name]; !ok {
		Fd[name] = fder
	}
}

//Fielder 域接口
type Fielder interface {
	Format() []byte
	Parse([]byte, *Position) string
	Name() int
	ValueString() string
}

//Position 当前位置
type Position struct {
	pos int
}

//NewPosion 创建位置
func NewPosion() *Position {
	return &Position{pos: 0}
}

//Get 获取指针位置当前
func (p *Position) Get() int {
	return p.pos
}

//Add 更新位置
func (p *Position) Add(value int) {
	p.pos += value
}

//Field 报文域
type Field struct {
	Name    int    //名称
	Type    int    //类型 固定 可变LL 长可变LLL
	Len     int    //字节长度
	Data    []byte //字节数据
	DataStr string
	PadMod  int
}

//长度定义
const (
	FIX    = 0 //value = 0,定长,
	LLVAR  = 2 //value = 2，长度为2字节
	LLLVAR = 3 //value = 3，长度为3字节

)

// 定长填充，不填充，左填充 右填充
const (
	NonPad = iota
	LeftPad
	RightPad
)

//NewField 创建报文域
func NewField() *Field {
	return new(Field)
}
